package com.openNetty.server.timertask;


import com.openNetty.common.system.LoggerUtil;
import com.openNetty.common.utils.DesUtil;
import com.openNetty.server.nettyserver.Global;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;


/**
 * 定时加密文件任务
 *
 * @version 1.0.0
 * @Author zhenggm
 */
public class EncFileTask implements Job {
    private static LoggerUtil logger = LoggerUtil.getLogger(EncFileTask.class);

    /**
     * 核心执行方法
     *
     * @param jobExecutionContext
     * @throws JobExecutionException
     */

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

        String path = Global.ROOT;
        try {
            buildDir(path);// 检测加密文件存放目录是否存在
        } catch (IOException e) {
            e.printStackTrace();
        }

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
        String srcFilePath = path + "/bakmysql-" + df.format(new Date()) + ".tar.gz";
        String encFilePath = path + "/encfile/encbacksql-" + df.format(new Date()) + ".tar.gz";

        try {
            logger.debug("开始加密文件，源文件：" + srcFilePath + "  加密后路径为：" + encFilePath);
            DesUtil.encrypt(srcFilePath, encFilePath); //文件加密操作
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
        logger.debug("文件加密成功");

    }

    /**
     * 创建文件加密存放目录
     *
     * @param root
     * @throws IOException
     */
    private void buildDir(String root) throws IOException {
        // 检测加密文件存放目录是否存在
        File backDir = new File(root + "/encfile");
        if (backDir.exists()) {
            if (!backDir.isDirectory()) {
                throw new IOException("the same name file exists, can not create dir");
            }
        } else {
            // 不存在则创建目录
            backDir.mkdir();
        }
    }
}
